/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package BussinesLogic;

import DataAccess.Dao_Competencia;
import DataModel.*;
import java.util.*;

public class BL_Competencia {

    Dao_Competencia dao_competencia;
    
    public BL_Competencia() {
        dao_competencia = new Dao_Competencia();
    }
      
    public Request registrarCompetencia(String nombre, String disciplina, String descripcion,Date fecha, String hora,
            String fase1, String fase2, String escenario){
        
        nombre = nombre.toUpperCase();
        int jugFase1;
        int jugFase2;
        Request rqst = new Request();
        
        rqst = checkFecha(escenario, fecha, hora);
        if(!rqst.getTransac()) return rqst;
        
        try{
            jugFase1 = Integer.parseInt(fase1);
            jugFase2 = Integer.parseInt(fase2);
        }
        catch(NumberFormatException e){
            rqst.setTransac(false);
            rqst.setMessage(e.getMessage());
            return rqst;
        }
        if(jugFase1<=jugFase2 || jugFase2<=3){
            rqst.setTransac(false);
            rqst.setMessage("La configuracion del numero de jugadores de cada fase no es valida");
            return rqst;
        }
                
        Disciplina disc = new Disciplina();
        disc.setNombre(disciplina);
        EspacioDeportivo esc = new EspacioDeportivo();
        esc.setNombre(escenario);
        
        Competencia competencia = new Competencia();
        competencia.setNombre(nombre);
        competencia.setDisciplina(disc);
        competencia.setDescripcion(descripcion);
        competencia.setFecha(fecha);
        competencia.setHora(hora);
        competencia.setCantJugFase1(jugFase1);
        competencia.setCantJugFase2(jugFase2);
        competencia.setEscenario(esc);
        
        rqst = dao_competencia.registrarCompetencia(competencia);
        if(!rqst.getTransac()) return rqst;
        
        return rqst;
        
    }
    
    public Request consultarCompetencia(String campo, String valor){
        
        Request rqst = dao_competencia.consultarCompetencia(campo,valor);
        
        return rqst;
    }
    
    public Request consultarCompetencias(){
        
        Request rqst = dao_competencia.consultarCompetencias();
        if(!rqst.getTransac()) return rqst;
        
        Vector v = (Vector) rqst.getObject();
        Vector vString = new Vector<String>(1,1);
        
        for(int i=0;i<v.size();i++){
            Competencia c = (Competencia) v.elementAt(i);
            vString.add(c.getNombre());
        }
        rqst.setTransac(true);
        rqst.setObject(vString);
        return rqst;
    }    
    
    private Request checkFecha(String escenario, Date fecha, String hora){

        Request rqst = new Request();

        Calendar calActual = Calendar.getInstance();
        Date d = calActual.getTime();
        if (d.compareTo(fecha) == -1) {
            rqst.setTransac(true);
        } else {
            rqst.setTransac(false);
            rqst.setMessage("La fecha de realizacion de la competencia no es valida");
            return rqst;
        }
        
        int h = Integer.parseInt(hora.split(":")[0]);
        int hInicio = h-3;
        int hFin = h+3;
        String horaInicio="";
        String horaFin = "";
        horaInicio =  hInicio + ":" + hora.split(":")[1];
        horaFin = hFin + ":" + hora.split(":")[1];
        if(hFin>=24) horaFin = "23:59";
        if(hInicio<0) horaInicio = "00:00";
        
        
        rqst = dao_competencia.consultarHorarioDisponible(escenario, fecha, horaInicio, horaFin);
        if(!rqst.getTransac() || (Integer) rqst.getObject()>0){
            rqst.setTransac(false);
            rqst.setMessage("No existe disponibilidad de horario para el escenario elegido");
        }

        return rqst;
    }
    
}
